package pe.com.bbva.ge.negocio;

import java.util.List;
import java.util.Map;

import pe.com.bbva.ge.domain.base.Identificador;
import pe.com.bbva.ge.domain.configuracion.Atm;
import pe.com.bbva.ge.domain.configuracion.Casetera;
import pe.com.bbva.ge.domain.configuracion.Denominacion;
import pe.com.bbva.ge.domain.configuracion.Lista;
import pe.com.bbva.ge.domain.configuracion.Parametro;
import pe.com.bbva.ge.domain.configuracion.Posicion;
import pe.com.bbva.ge.domain.configuracion.Regla;
import pe.com.bbva.ge.domain.configuracion.Transportadora;
import pe.com.bbva.ge.domain.configuracion.Valor;
import pe.com.bbva.ge.domain.quartz.QrtzCronTriggers;
import pe.com.bbva.ge.domain.quartz.QrtzJobDetails;
import pe.com.bbva.ge.domain.quartz.QrtzTriggers;
import pe.com.bbva.ge.domain.seguridad.Membresia;
import pe.com.bbva.ge.domain.seguridad.Opcion;
import pe.com.bbva.ge.domain.seguridad.Permiso;
import pe.com.bbva.ge.domain.seguridad.Rol;
import pe.com.bbva.ge.domain.solicitud.TipoSolicitud;

public interface ConfiguracionNegocio extends CrudNegocio {
	
	Object obtenerNotificaciones();

	//Valor
	List<Valor> obtenerValores(String codigoLista);
	Valor obtenerValor(String codigoLista, String codigoValor);
	
	List<Denominacion> 			obtenerDenominaciones		(Valor moneda, Valor tipo);
	List<Denominacion> 			obtenerDenominaciones		(Valor divisa);
	List<Posicion> 				obtenerPosicones			(Valor TipoOrigenDestino);
	List<TipoSolicitud> 		obtenerTipoSolicitud		();
	List<Atm> 					obtenerListaATM				();
	List<Casetera> 				obtenerListaCaseteras		(Atm atm);
	List<Transportadora> 		obtenerListaTransportadoras	();
	List<Lista> 				buscarListas				(Lista lista);
	List<Valor> 				buscarValores				(Valor valor);
	Parametro 					obtenerParametroxCodigo		(String codigo);
	List<Opcion> 				buscarOpciones				(Opcion opcion);
	Map<String, List<Opcion>> 	listarOpciones				();
	List<Parametro> 			buscarParametros			(Parametro parametro);
	List<Rol> 					buscarRoles					(Rol rol);
	List<Permiso> 				obtenerPermisosXRol			(Long idRol, boolean estadoActivo);
	void 						guardarPermisos				(Long idRol, List<Long> idsOpciones);
	List<Rol> 					obtenerRolesHijo			(Rol rol);
	List<Membresia> 			buscarMembresias			(Membresia membresia);
	
	//Quartz
	List<QrtzCronTriggers> 		buscarCronTriggers			(QrtzCronTriggers qrtzCronTriggers);
	List<QrtzJobDetails> 		buscarJobDetails			(QrtzJobDetails qrtzJobDetails);		
	List<QrtzTriggers> 			buscarTriggers				(QrtzTriggers qrtzTriggers);
	
	<Entidad> Entidad 			obtenerEntidadPorCodigo		(Identificador identificador, Class<Entidad> clase);

	List<Atm> 					obtenerAtmsPorProveedor		(Posicion posicionDestino);

	int[] 						obtenerDimensionesAtmPorCasetera(Posicion posicionDestino);
	
	List<Casetera> 				obtenerCaseterasPorProveedor(Posicion posicionDestino);
	List<Regla>					buscarReglas				(Regla regla);
}
